#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdbool.h>

struct ListNode {
    int val;
    struct ListNode* next;
};

//struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB)
//{
//    struct ListNode* list1, * curA;
//    struct ListNode* list2, * curB;
//    list1 = curA = headA;
//    list2 = curB = headB;
//    int countA = 0;
//    int countB = 0;
//    while (list1)
//    {
//        countA++;
//        list1 = list1->next;
//    }
//    while (list2)
//    {
//        countB++;
//        list2 = list2->next;
//    }
//    int num = abs(countA - countB);
//    while (num--)
//    {
//        if (countA > countB)
//        {
//            curA = curA->next;
//        }
//        else
//        {
//            curB = curB->next;
//        }
//    }
//    while (curA && curB)
//    {
//        if (curA != curB)
//        {
//            curA = curA->next;
//            curB = curB->next;
//        }
//        else
//            return curA;
//    }
//    return NULL;
//}


//bool hasCycle(struct ListNode* head)
//{
//    struct ListNode* slow, * fast;
//    slow = fast = head;
//    while (fast && fast->next)
//    {
//        slow = slow->next;
//        fast = fast->next->next;
//        if (fast == slow)
//        {
//            return true;
//        }
//    }
//    return false;
//}


//struct ListNode* hasCycle(struct ListNode* head)
//{
//    struct ListNode* slow, * fast;
//    slow = fast = head;
//    while (fast && fast->next)
//    {
//        slow = slow->next;
//        fast = fast->next->next;
//        if (fast == slow)
//        {
//            return slow;
//        }
//    }
//    return NULL;
//}
//
//struct ListNode* detectCycle(struct ListNode* head)
//{
//    struct ListNode* meet = hasCycle(head);
//    if (meet == NULL)
//        return NULL;
//
//
//    struct ListNode* cur1 = head;
//    struct ListNode* cur2 = meet;
//    while (cur1 != cur2)
//    {
//        cur1 = cur1->next;
//        cur2 = cur2->next;
//    }
//    if (cur1 == cur2)
//        return cur1;
//    else
//        return NULL;
//}